package com.hs.util;

import java.sql.*;

/*
工具类： 公共的对象或属性 或方法
prepareStatement  是为了有效的防止sql注入  就会采用占位符方式进行传递
statement  直接采用的是字符拼接的模式 不安全
 */
public class JDBCUtils {
    //定义全局的私有变量 定义成静态的变量  我可以通过类名点属性名
    private static String driver="com.mysql.cj.jdbc.Driver";
    private static String url="jdbc:mysql://localhost:3306/hskjteacher?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC";
    private static String username="root";
    private static String password="12345";
    private static Connection conn=null;
    private static PreparedStatement ps=null;
    private static ResultSet res=null;

    static {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    //定义一个静态的方法，与数据建立连接
    public static void getConnection(){
        try {
            conn=DriverManager.getConnection(url,username,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //insert into ted values(null,?,?)  obj[]={1，"zs",123456}
    //定义一个静态通用的方法，来实现crud
    public static int update(String sql,Object obj[]){
        getConnection(); //建立连接的方法
        int num= 0;
        try {
            ps=conn.prepareStatement(sql);
            if(obj!=null){
                for (int i = 0; i < obj.length; i++) {
                    ps.setObject(i+1,obj[i]);
                }
            }
            num=ps.executeUpdate();
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            close();
        }
        return num;
    }
    //定义查询
    public static ResultSet query(String sql,Object obj[]){

        getConnection();
        try {
            ps=conn.prepareStatement(sql);
            if (obj!=null){
                for (int i = 0; i < obj.length; i++) {
                    ps.setObject(i+1,obj[i]);
                }
            }
            res=ps.executeQuery();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return res;
    }


    //通用的释放资源方法
    public static void close(){
        try {
        if (res!=null){
            res.close();
         }
        if (conn!=null){
            conn.close();
        }
        if (ps!=null){
            ps.close();
        }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }




}
